package com.yanqu.road.web.controller.game;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yanqu.road.entity.web.HttpJsonWebParam;
import com.yanqu.road.logic.config.ChannelConfig;
import com.yanqu.road.server.helper.SignHelper;
import com.yanqu.road.server.manger.AppKeyMgr;
import com.yanqu.road.server.manger.ServerListMgr;
import com.yanqu.road.utils.string.StringUtils;
import com.yanqu.road.web.WebServer;
import com.yanqu.road.web.controller.BaseJsonHttpServlet;
import com.yanqu.road.webservice.invoke.GameWebServiceInvoke;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.SortedMap;

@WebServlet(urlPatterns = "/queryPlayerOnline")
public class QueryPlayerOnline extends BaseJsonHttpServlet {

	private static Logger logger = LogManager.getLogger(QueryPlayerOnline.class.getName());

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		logger.info("request queryPlayerOnline");
		HttpJsonWebParam httpJsonWebParam = super.parseRequest(request);
		JSONObject paramObj = httpJsonWebParam.getParamObj();
		String usersID;
		String sign;
		List<Long> userIdList;
		try{
			usersID = paramObj.getString("usersID");
			sign = paramObj.getString("sign");
			userIdList = StringUtils.stringToLongList(usersID, ",");
			if(StringUtils.isNullOrEmpty(usersID)){
				sendResult(response, 0, "args usersID is empty");
				return;
			}
			if(userIdList.size() < 1){
				sendResult(response, 0, "args usersID is empty");
				return;
			}
		} catch (Exception e) {
			logger.error("queryPlayerOnline args error:" + e);
			sendResult(response, 0, "args error");
			return;
		}
		try{
			SortedMap<String, String> paramMap = SignHelper.getParamMap(paramObj);
			if(!SignHelper.checkSign(paramMap, AppKeyMgr.getAndroidAppSecret(), sign)){
				if(ServerListMgr.isCnMergeServer(WebServer.getInstance().getServerId())){
					if(!SignHelper.checkSign(paramMap, ChannelConfig.APP_SECRET_CONFIG, sign)){
						logger.error("queryPlayerOnline sign error");
						sendResult(response, 0, "sign error");
						return;
					}
				}else {
					logger.error("queryPlayerOnline sign error");
					sendResult(response, 0, "sign error");
					return;
				}
			}
			String queryData = GameWebServiceInvoke.queryPlayerOnline(usersID);
			JSONObject dataObj = JSON.parseObject(queryData);
			JSONObject resultObj = getResultObj(1, "success");
			resultObj.put("data", dataObj);
			sendMessage(response, resultObj.toJSONString());
		} catch (Exception e) {
			logger.error("queryPlayerOnline error:" + e);
			sendResult(response, 0, "other error");
		}
	}
}
